// 表达式方法和声明方法，在基本使用规则中保持一致
// 表达式方法和声明方法的区别：表达式方法可以通过变量声明符限制方法的特性

// 声明方法
//  1. 允许先使用后定义
showFun();
function showFun(){
    console.log("showFun-1")
}
//  2. 方法可能重复声明
function showFun(){
    console.log("showFun-2")
}

// 表达式方法
try {
//    1. 以 var 方式声明的方法不能先使用后调用的
    printFun();
    var printFun = function (){
        console.log("printFun-1")
    }
} catch (e) {
    console.log(e)
}

try {
//    2. 以 let 方式声明的方法不能先使用后调用的
//     printFunA();
    let printFunA = function (){
        console.log("printFunA-1")
    }
//    3. 以 let 方式声明的方法不能重复声明
//     let printFunA = function (){
//         console.log("printFunA-2")
//     }
    printFunA = function (){
        console.log("printFunA-2")
    }
    printFunA();
} catch (e) {
    console.log(e)
}

//  4. 以 const 声明的方法不能先使用后调用的
//  5. 以 const 声明的方法不能重复声明
//  6. 以 const 声明的方法不能重新赋值
try {
    const printFunB = function (){
        console.log("printFunB-1")
    }
    // printFunB = function (){
    //     console.log("printFunB-2")
    // }
    printFunB();
} catch (e) {
    console.log(e)
}









